var input = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), "..", "day10.txt")).Select(int.Parse).ToArray(); var jolts = new[] { 0, input.Max()+3 }.Concat(input).OrderBy(o => o).ToArray(); var diffs = jolts.Zip(jolts.Skip(1), (a,b) => b-a).GroupBy(j => j).ToDictionary(g => g.Key, g => g.Count()); var part1 = diffs[1] * diffs[3]; part1.Dump(); var connections = new Dictionary { { 0, 1 }}; foreach (var jolt in jolts.Skip(1)) { connections[jolt] = (connections.TryGetValue(jolt - 1, out var one) ? one : 0) + (connections.TryGetValue(jolt - 2, out var two) ? two : 0) + (connections.TryGetValue(jolt - 3, out var three) ? three : 0); } var part2 = connections[jolts.Max()]; part2.Dump();